<?php
include_once '../config/koneksi.php';
include_once '../library/fpdf.php';
include_once 'liburcutibersama.php';
include_once 'kategoricuti.php';
include_once 'pegawai.php';

class PengajuanCuti{
var $id_cuti;
var $seksi;
var $nip_pengaju;
var $nama_pengaju;
var $nip_pengganti;
var $nama_pengganti;
var $tanggal_awal;
var $tanggal_akhir;
var $alamat_cuti;
var $durasi_cuti;
var $kategori_cuti;
var $catatan_pengaju;
var $status;
var $priotitas;
protected $connect;

        function __construct(){
            $this->connect = new Koneksi();
            $this->connect->connect();
        }
        
        //fungsi untuk menghitung panjang cuti berdasarkan kategori cuti
        function countPanjangCuti($kategori_cuti,$tgl_awal,$tgl_akhir){
            $lcb=new LiburCutiBersama();
            $cb=$lcb->countCLB($tgl_awal,$tgl_akhir);
            $tgl1 = explode("-", $tgl_awal);
            $tgl2 = explode("-", $tgl_akhir);
            $jd1 = GregorianToJD($tgl1[1], $tgl1[2], $tgl1[0]);
            $jd2 = GregorianToJD($tgl2[1], $tgl2[2], $tgl2[0]);
            $num = $jd2-$jd1; //selisih hari
            $sql =$this->connect->query("SELECT tgl_lcb from t_lcb where jns_lcb='L'"); //mendapatkan hari libur
            $libur = 0;
            for($i=0;$i<=$num;$i++){
                $tgl_awal = strtotime('+1 day', strtotime($tgl_awal)); //masalahnya kayake ada disini
                $tgl_awal = date('Y-m-d',$tgl_awal); //diubah ke date dulu
                $wday = date('w',strtotime($tgl_awal)); //ubah lagi ke strtotime->date          
                if($wday==0 OR $wday==6){
                    $libur++;
                }else{
                    //disini di cek dengan data hari libur di DB
                    foreach ($sql as $val){
                        if(date('Y-m-d',strtotime($tgl_awal))==date('Y-m-d',  strtotime($val['tgl_lcb']))){ //jika sama dengan data libur ++
                            $libur++;
                        }
                    }
                }
            }  
            $panjangcuti=0;
            if($kategori_cuti==1 OR $kategori_cuti==3){
                $panjangcuti=($num-$libur-$cb)+1;
            }else{
                $panjangcuti=+$num+1;
            }
            $this->durasi_cuti=$panjangcuti;
            return $this->durasi_cuti;
        }

        //fungsi untuk merekam cuti
        function insertCuti($nip_pengaju,$id_kategori,$tgl_awal,$tgl_akhir,$nip_penanggung,$alamat_cuti,$catatan_pengaju,$status,$durasi_cuti){
            $this->nip_pengaju=$nip_pengaju;
            $this->kategori_cuti=$id_kategori;
            $this->tanggal_awal=$tgl_awal;
            $this->tanggal_akhir=$tgl_akhir;
            $this->nip_pengganti=$nip_penanggung;
            $this->alamat_cuti=$alamat_cuti;
            $this->catatan_pengaju=$catatan_pengaju;
            $sql=$this->connect->prepare("INSERT INTO d_pengajuancuti(nip_pengaju,id_kategori,tgl_awal,tgl_akhir,nip_penanggung,alamat_cuti,catatan_pengaju,status_pengajuan,durasi_cuti) VALUES(?,?,?,?,?,?,?,?,?)");
            $isi=array($nip_pengaju,$id_kategori,$tgl_awal,$tgl_akhir,$nip_penanggung,$alamat_cuti,$catatan_pengaju,$status,$durasi_cuti);
            $sql->execute($isi);
            $hasil=$sql->rowCount();
            return $hasil;
	}
	
        //fungsi untuk mendapatkan daftar pengajuan cuti pribadi
        function getAllCutiku($nip_pengaju){
            $data=array();
            $sql=$this->connect->query("SELECT a.id_pengajuan,DATE_FORMAT(a.tgl_awal,'%d-%m-%Y') as tgl_awal,DATE_FORMAT(a.tgl_akhir,'%d-%m-%Y') as tgl_akhir,a.durasi_cuti,a.status_pengajuan,a.alamat_cuti,a.catatan_pengaju,b.nm_kategori,a.nip_penanggung as penanggung,c.nama as nama_penanggung,d.ket_pengajuan
                                            FROM d_pengajuancuti AS a
                                            INNER JOIN ref_kategoricuti AS b ON a.id_kategori = b.id_kategori
                                            LEFT JOIN d_pegawai AS c ON a.nip_penanggung = c.nip
                                            INNER JOIN ref_statuscuti as d ON a.status_pengajuan=d.status_pengajuan
                                            WHERE a.nip_pengaju='".$nip_pengaju."'");
            if($sql){
                while($row=$sql->fetch()){
                    $pengajuan=new PengajuanCuti();
                    $pengajuan->id_cuti=$row['id_pengajuan'];
                    $pengajuan->nip_pengganti=$row['penanggung'];
                    $pengajuan->nama_pengganti=$row['nama_penanggung'];
                    $pengajuan->kategori_cuti=$row['nm_kategori'];
                    $pengajuan->tanggal_awal=$row['tgl_awal'];
                    $pengajuan->tanggal_akhir=$row['tgl_akhir'];
                    $pengajuan->durasi_cuti=$row['durasi_cuti'];
                    $pengajuan->catatan_pengaju=$row['catatan_pengaju'];
                    $pengajuan->almt_cuti=$row['alamat_cuti'];
                    $pengajuan->status=strtoupper($row['ket_pengajuan']);
                    $data[]=$pengajuan;
                }
                return $data;
            }
	}
        
        //fungsi untuk mendapatkan cuti berdasarkan id cuti
        function getCuti($id_cuti,$nip){
            $pengajuan=new PengajuanCuti();
            $sql=$this->connect->query("SELECT a.id_pengajuan,a.nip_pengaju,d.nama as nama_pengaju,DATE_FORMAT(a.tgl_awal,'%d-%m-%Y') as tgl_awal,DATE_FORMAT(a.tgl_akhir,'%d-%m-%Y') as tgl_akhir,a.durasi_cuti,a.alamat_cuti,a.catatan_pengaju,
                                            a.id_kategori as kategori,a.nip_penanggung as penanggung,c.nama as nama_penanggung
                                            FROM d_pengajuancuti AS a
                                            LEFT JOIN d_pegawai AS c ON a.nip_penanggung = c.nip
                                            INNER JOIN d_pegawai as d ON a.nip_pengaju=d.nip
                                            WHERE a.id_pengajuan='".$id_cuti."' AND a.nip_pengaju=".$nip);
            if($sql){
                $row=$sql->fetch();
                    $pengajuan->id_cuti=$row['id_pengajuan'];
                    $pengajuan->nip_pengaju=$row['nip_pengaju'];
                    $pengajuan->nama_pengaju=$row['nama_pengaju'];
                    $pengajuan->nip_pengganti=$row['penanggung'];
                    $pengajuan->nama_pengganti=$row['nama_penanggung'];
                    $pengajuan->kategori_cuti=$row['kategori'];
                    $pengajuan->tanggal_awal=$row['tgl_awal'];
                    $pengajuan->tanggal_akhir=$row['tgl_akhir'];
                    $pengajuan->durasi_cuti=$row['durasi_cuti'];
                    $pengajuan->catatan_pengaju=$row['catatan_pengaju'];
                    $pengajuan->alamat_cuti=$row['alamat_cuti'];
                }
                return $pengajuan;
        }
        
        //fungsi untuk melihat permintaan penanggungjawab cuti
        function getAlihTanggungjawab($nip_pengganti){
            $data=array();
            $sql=$this->connect->query("select a.id_pengajuan,a.nip_pengaju,b.nama,c.nm_kategori,a.tgl_awal,a.tgl_akhir,a.catatan_pengaju,b.nama,a.status_pengajuan
                                        FROM d_pengajuancuti as a INNER JOIN d_pegawai as b
                                        ON a.nip_pengaju=b.nip
                                        INNER JOIN ref_kategoricuti as c
                                        ON a.id_kategori=c.id_kategori
                                        WHERE a.nip_penanggung='".$nip_pengganti."'
                                            ORDER BY status_pengajuan DESC");
            if($sql){
                while($row=$sql->fetch()){
                    $pengajuan=new PengajuanCuti();
                    $pengajuan->id_cuti=$row['id_pengajuan'];
                    $pengajuan->nip_pengaju=$row['nip_pengaju'];
                    $pengajuan->nama_pengaju=$row['nama'];
                    $pengajuan->kategori_cuti=$row['nm_kategori'];
                    $pengajuan->tanggal_awal=$row['tgl_awal'];
                    $pengajuan->tanggal_akhir=$row['tgl_akhir'];
                    $pengajuan->catatan_pengaju=$row['catatan_pengaju'];
                    $pengajuan->status=$row['status_pengajuan'];
                    $data[]=$pengajuan;
                }
                return $data;
            }
        }
        
        //fungsi untuk melihat seluruh daftar pengajun cuti masing-masing bagian
        //ketika pelaksana, menampilkan seluruh pengajuan cuti pelaksana
        //ketika kasi, menampilkan cuti seluruh kasi dan bawahan
        //ketika kepala kantor, menampilkan seluruh pengajuan cuti
	function getAllPengajuanCuti($nip,$jabatan){
            $where;
            if($jabatan==1){
                $where="WHERE 1";
            }elseif($jabatan>=2){
                $where="WHERE a.id_seksi=$jabatan";
            }elseif($_SESSION['admin']=='Y'){
                $where="WHERE a.status=5";
            }
            $data=array();
            $sql=$this->connect->query("SELECT a.id_pengajuan, a.nip_pengaju, CONCAT( a.id_seksi, ',', e.nm_seksi ) AS seksi, 
                                        b.nama AS nama_pengaju, c.nm_kategori, a.tgl_awal, a.tgl_akhir,a.durasi_cuti, a.nip_penanggung, 
                                        d.nama AS nama_penanggung, a.status_pengajuan FROM d_pengajuancuti AS a
                                        LEFT JOIN d_pegawai AS b ON a.nip_pengaju = b.nip
                                        LEFT JOIN d_pegawai AS d ON a.nip_penanggung = d.nip
                                        LEFT JOIN ref_kategoricuti AS c ON a.id_kategori = c.id_kategori
                                        LEFT JOIN d_seksi AS e ON a.id_seksi = e.id_seksi 
                                            ".$where."
                                            ORDER BY status_pengajuan DESC");
            if($sql){
                while($row=$sql->fetch()){
                    $pengajuan=new PengajuanCuti();
                    $pengajuan->id_cuti=$row['id_pengajuan'];
                    $pengajuan->id_seksi=$row['seksi'];
                    $pengajuan->nip_pengaju=$row['nip_pengaju'];
                    $pengajuan->nama_pengaju=$row['nama_pengaju'];
                    $pengajuan->nip_pengganti=$row['nip_penanggung'];
                    $pengajuan->nama_pengganti=$row['nama_penanggung'];
                    $pengajuan->kategori_cuti=$row['nm_kategori'];
                    $pengajuan->tanggal_awal=$row['tgl_awal'];
                    $pengajuan->tanggal_akhir=$row['tgl_akhir'];
                    $pengajuan->durasi_cuti=$row['durasi_cuti'];
                    $pengajuan->status=$row['status_pengajuan'];
                    $data[]=$pengajuan;
                }
                return $data;
            }
	}
	
        //fungsi untuk mengupdate status cuti
	function updateStatusCuti($id_cuti, $status){
            $sql=$this->connect->prepare("update d_pengajuancuti set status_pengajuan= ? where id_pengajuan= ?");
            $isi=array($status,$id_cuti);
            $sql->execute($isi);
            $jumlah=$sql->rowCount();
            return $jumlah;
	}
        
        //fungsi untuk mengecek status sedang menjalankan cuti atau menanggung pekerjaan cuti teman pada suatu tanggal
        //jika sedang menjalankan cuti atau menanggung tugas teman yang cuti, maka tidak bisa mengajukan cuti
        function cekStatus($nip,$tgl_awal,$tgl_akhir){
            $sql=$this->connect->query("select * from d_pengajuancuti
                                            WHERE (nip_pengaju='$nip' OR nip_penanggung='$nip') 
                                               AND 
                                               (tgl_awal BETWEEN '$tgl_awal' AND '$tgl_akhir'
                                               OR tgl_akhir BETWEEN '$tgl_awal' AND '$tgl_akhir'
                                               OR '$tgl_awal' BETWEEN tgl_awal AND tgl_akhir
                                               OR '$tgl_akhir' BETWEEN tgl_awal AND tgl_akhir
                                               )");
            $jumlah=$sql->rowCount();
            return $jumlah;
        }
        
        //fungsi untuk menghapus pengajuan cuti
        //bisa digunakan ketika pengajuan cuti belum disetujui oleh pengganti pekerjaan
        function deleteCuti($id_cuti){
              $sql=$this->connect->query("DELETE from d_pengajuancuti WHERE id_pengajuan=".$id_cuti);
              $hasil=$sql->rowCount();
              return $hasil;
        }
        
        function cetakSuratPermohonanCuti($id_cuti){
            $pangkat_golongan="";
            $kategori_cuti="";
            $cetak=$this->getCuti($id_cuti);
            $kategori=new KategoriCuti();
            $data_kategori=$kategori->getKategoriCuti($cetak->kategori_cuti);
            $kategoricuti=$data_kategori->nm_kategori;
            $pegawai=new Pegawai();
            $data_pegawai=$pegawai->getPegawai($cetak->nip_pengaju);
            $pangkat=$pegawai->getPangkat();
            foreach($pangkat as $pangkats){
                $pangkatnya=explode(",",$pangkats->pangkat_golongan);
                if($pangkatnya[0]==$data_pegawai->pangkat_golongan)$pangkat_golongan=$pangkatnya[1];
            }
            $pdf=new FPDF();
            $pdf->AddPage('P','A4');
            $pdf->setfont('arial','',11);
            $pdf->Cell(40,5,'SURAT PERMOHONAN '.strtoupper($kategoricuti),'0',0,'L');
            $pdf->Cell(80,5,'','0',0,'L');
            $pdf->Cell(40,5,'SURAT EDARAN KEPALA BADAN','0',1,'L');
            $pdf->Cell(120,5,'','0',0,'L');
            $pdf->Cell(40,5,'ADMINISTRASI KEPEGAWAIAN NEGARA','0',1,'L');
            $pdf->Cell(120,5,'','0',0,'L');
            $pdf->Cell(40,5,'Nomor:01/ SE/ 1977','0',1,'L');
            $pdf->Cell(120,5,'','0',0,'L');
            $pdf->Cell(40,5,'Tanggal:25 Februari 1977','0',1,'L');
            $pdf->Cell(120,5,'','0',0,'L');
            $pdf->Cell(190,10,'','0',1,'L');
            $pdf->Cell(40,5,'Kepada Yth.','0',1,'L');
            $pdf->Cell(130,5,'','0',0,'L');
            $pdf->Cell(40,5,'Kepala KPPN','0',1,'L');
            $pdf->Cell(120,5,'','0',0,'L');
            $pdf->Cell(40,5,'Melalui','0',1,'L');
            $pdf->Cell(190,10,'','0',1,'L');
            $pdf->Cell(40,10,'Yang bertanda tangan dibawah ini :','0',1,'L');
            $pdf->Cell(50,10,'Nama',0,0,'L');
            $pdf->Cell(5,10,':',0,0,'L');
            $pdf->Cell(5,10,$cetak->nama_pengaju,0,1,'L');
            $pdf->Cell(50,10,'NIP','0',0,'L');
            $pdf->Cell(5,10,':',0,0,'L');
            $pdf->Cell(5,10,$cetak->nip_pengaju,0,1,'L');
            $pdf->Cell(50,10,'Pangkat/Golongan Ruang','0',0,'L');
            $pdf->Cell(5,10,':',0,0,'L');
            $pdf->Cell(50,10,$pangkat_golongan,'0',1,'L');
            $pdf->MultiCell(190,10,'Dengan ini mengajukan Cuti Tahunan selama '.$cetak->durasi_cuti.' hari kerja, terhitung mulai tanggal '.$cetak->tanggal_awal.' s/d '.$cetak->tanggal_akhir.'. Selama menjalankan cuti, alamat saya adalah di '.$cetak->alamat_cuti,0,'J');
            $pdf->Cell(50,10,'','0',1,'L');
            if($cetak->nip_pengganti !=NULL){
            $pdf->Cell(50,10,'Penanggungjawab Pekerjaan','0',0,'L');
            }else{
            $pdf->Cell(50,10,'','0',0,'L');    
            }
            $pdf->Cell(50,10,'','0',0,'L');
            $pdf->Cell(50,10,'Pengambil Cuti','0',1,'L');
            $pdf->Cell(50,10,'','0',1,'L');
            $pdf->Cell(50,10,'','0',1,'L');
            $pdf->Cell(50,5,$cetak->nama_pengganti,'0',0,'L');
            $pdf->Cell(50,5,'','0',0,'L');
            $pdf->Cell(50,5,$cetak->nama_pengaju,'0',1,'L');
            $pdf->Cell(50,5,$cetak->nip_pengganti,'0',0,'L');
            $pdf->Cell(50,5,'','0',0,'L');
            $pdf->Cell(50,5,$cetak->nip_pengaju,'0',1,'L');
            $pdf->Cell(50,5,'','0',1,'L');
            $pdf->Cell(100,10,'CATATAN PEJABAT KEPEGAWAIAN','LTR',1,'L');
            $pdf->Cell(100,10,'Cuti yang telah diambil dalam tahun yang bersangkutan','LR',1,'L');
            $pdf->Cell(100,10,'1.Cuti tahunan','LR',1,'L');
            $pdf->Cell(100,10,'2.Cuti besar','LR',1,'L');
            $pdf->Cell(100,10,'3.Cuti sakit','LR',1,'L');
            $pdf->Cell(100,10,'4.Cuti bersalin','LR',1,'L');
            $pdf->Cell(100,10,'5.Cuti karena alasan penting','LR',1,'L');
            $pdf->Cell(100,10,'6.Keterangan lain-lain','LBR',1,'L');
            $pdf->output();
        }
}